﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace FinalSettlementModel
{
    public class TableHoSo : Helper
    {
        public class reportHoSo
        {
            // Dữ liệu bảng tblHoSo
            public int HoSoID { set; get; }
            public string TenDuAn { set; get; }
            public int? MaDuAn { set; get; }
            public string NhomCongTrinh { set; get; }
            public string QuyetDinhDauTu { set; get; }
            public string ChuDauTu { set; get; }
            public DateTime NgayNhan { set; get; }
            public decimal? TongDuAn { set; get; }
            public decimal TongDuToan { set; get; }
            public decimal DeNghiGiaTriQuyetToan { set; get; }
            public string HinhThucChonThau { set; get; }
            public string CanBo { set; get; }
            // Dữ liệu bảng tblPheDuyet
            public int? PheDuyetID { set; get; }
            public string DiaDiem { set; get; }
            public DateTime? TGKhoiCong { set; get; }
            public DateTime? TGHoanThanh { set; get; }
            public string QuyMoDauTu { set; get; }
            public decimal? GiaTriQuyetToan { set; get; }
            public decimal? ChiPhiXayDung { set; get; }
            public decimal? ChiPhiThietBi { set; get; }
            public decimal? ChiPhiQLDA { set; get; }
            public decimal? ChiPhiTVDT { set; get; }
            public decimal? ChiPhiBTGPMB { set; get; }
            public decimal? ChiPhiKhac { set; get; }
            public string TrinhKy { set; get; }
            public string SoLuu { set; get; }
            public DateTime? NgayPheDuyet { set; get; }
            public string VanBanPheDuyet { set; get; }
            public decimal? PhiThamTra { set; get; }
            public string HoanThanhQuyetToan { set; get; }
            public string NguonVonID { set; get; }
            public string NguonVon { set; get; }
        }

        private string query = "SELECT HS.ID,HS.TenDuAn,HS.MaDuAn,HS.NhomCongTrinhId,HS.QuyetDinhDauTuId,HS.ChuDauTuId,HS.NgayNhan,HS.TongDuAn," +
            "HS.TongDuToan,HS.DeNghiQuyetToan,HS.HinhThucChonThauId,HS.UserId," +
            "CT.NhomCongTrinh, QD.QuyetDinhDauTu, CDT.ChuDauTu, HT.HinhThucChonThau, CB.CanBo, U.Fullname " +
            "FROM dbo.[TblHoSo] AS HS " +
            "INNER JOIN dbo.[TblNhomCongTrinh] AS CT ON HS.NhomCongTrinhId = CT.ID " +
            "INNER JOIN dbo.[TblQuyetDinhDauTu] AS QD ON HS.QuyetDinhDauTuId = QD.ID " +
            "INNER JOIN dbo.[TblChuDauTu] AS CDT ON HS.ChuDauTuId = CDT.ID " +
            "INNER JOIN dbo.[TblHinhThucChonThau] AS HT ON HS.HinhThucChonThauId = HT.ID " +
            "INNER JOIN dbo.[TblCanBo] AS CB ON HS.CanBoId = CB.ID " +
            "INNER JOIN dbo.[TblUser] AS U ON HS.UserId = U.ID ";

        // Hàm lấy tất cả danh sách hồ sơ
        public IQueryable<reportHoSo> listProfile()
        {
            var profile = from HS in nc.TblHoSos
                          join PD in nc.TblPheDuyets on HS.ID equals PD.HoSoId into PD_HS
                          from PH in PD_HS.DefaultIfEmpty()
                          join NV in nc.TblNguonVon_PheDuyets on PH.ID equals NV.PheDuyetId into NV_PD
                          from NP in NV_PD.DefaultIfEmpty()
                          orderby HS.ID
                          select new reportHoSo()
                          {
                            // Dữ liệu bảng tblHoSo
                            HoSoID = HS.ID,
                            TenDuAn = HS.TenDuAn,
                            MaDuAn = HS.MaDuAn,
                            NhomCongTrinh = HS.TblNhomCongTrinh.NhomCongTrinh,
                            QuyetDinhDauTu = HS.TblQuyetDinhDauTu.QuyetDinhDauTu,
                            ChuDauTu = HS.TblChuDauTu.ChuDauTu,
                            NgayNhan = HS.NgayNhan,
                            TongDuAn = HS.TongDuAn,
                            TongDuToan = HS.TongDuToan,
                            DeNghiGiaTriQuyetToan = HS.DeNghiQuyetToan,
                            HinhThucChonThau = HS.TblHinhThucChonThau.HinhThucChonThau,
                            CanBo = HS.TblCanBo.CanBo,
                            // Dữ liệu bảng tblPheDuyet                            
                            PheDuyetID = PH.ID,
                            DiaDiem = PH.DiaDiem,
                            TGKhoiCong = PH.TGKhoiCong,
                            TGHoanThanh = PH.TGHoanThanh,
                            QuyMoDauTu = PH.QuyMoDauTu,
                            GiaTriQuyetToan = PH.GTQTDuocDuyet,
                            ChiPhiXayDung = PH.ChiPhiXayDung,
                            ChiPhiThietBi = PH.ChiPhiThietBi,
                            ChiPhiQLDA = PH.ChiPhiQLDA,
                            ChiPhiTVDT = PH.ChiPhiTVDT,
                            ChiPhiBTGPMB = PH.ChiPhiBTGPMB,
                            ChiPhiKhac = PH.ChiPhiKhac,
                            TrinhKy = (PH.TrinhKy == true)? "Đã trình ký" : "Chưa trình ký",
                            SoLuu = PH.SoLuu,
                            NgayPheDuyet = PH.NgayPheDuyet,
                            VanBanPheDuyet = PH.VanBanPheDuyet,
                            PhiThamTra = PH.PhiThamTra,
                            HoanThanhQuyetToan = (PH.HoanThanh == true)? "Đã hoàn thành" : "Chưa hoàn thành",
                            NguonVonID = NP.NguonVonId.ToString(),
                            NguonVon = NP.TblNguonVon.NguonVon
                          };
            return profile;
        }

        public DataTable ListAllProfileData()
        {
            return this.ExecuteDataTable(this.query, null);
        }

        // Hàm lấy hồ sơ mới
        public DataTable ListNewProfileData()
        {
            string _query = this.query +" WHERE HS.CanBoId =1";
            return this.ExecuteDataTable(_query, null);
        }

        // Hàm lấy hồ sơ đã giao
        public DataTable ListUseProfileData()
        {
            string _query = this.query + " WHERE HS.CanBoId >1";
            return this.ExecuteDataTable(_query, null);
        }

        // Hàm kiểm tra dữ liệu hồ sơ đã tồn tại hay chưa (sử dụng cho phương thức tạo mới và cập nhật)
        public bool checkProfileName(int id, string profileName)
        {
            var checkProfile = from check in nc.TblHoSos
                               where check.ID != id && check.TenDuAn == profileName
                               select check;
            if (checkProfile.Any())
            {
                return false;
            }
            return true;
        }

        // Hàm cập nhật thông tin cán bộ thẩm tra
        public void updateExamine(int HoSoId, int CanBoId)
        {
            var profile = nc.TblHoSos.Single(s => s.ID == HoSoId);
            profile.TblCanBo = nc.TblCanBos.Single(s => s.ID == CanBoId);
            nc.SubmitChanges();
        }

        // Hàm tạo mới dữ liệu hồ sơ
        public void insertProfile(string TenDuAn,
                                    int MaDuAn,
                                    int NhomCongTrinhId,
                                    int QuyetDinhDauTuId,
                                    int ChuDauTuId,
                                    DateTime NgayNhan,
                                    decimal TongDuAn,
                                    decimal TongDuToan,
                                    decimal DeNghiQuyetToan,
                                    int HinhThucChonThauId,                                    
                                    int UserId)
        {
            TblHoSo profile = new TblHoSo();
            profile.TenDuAn = TenDuAn;
            profile.MaDuAn = MaDuAn;
            profile.NhomCongTrinhId = NhomCongTrinhId;
            profile.QuyetDinhDauTuId = QuyetDinhDauTuId;
            profile.ChuDauTuId = ChuDauTuId;
            profile.NgayNhan = NgayNhan;
            profile.TongDuAn = TongDuAn;
            profile.TongDuToan = TongDuToan;
            profile.DeNghiQuyetToan = DeNghiQuyetToan;
            profile.HinhThucChonThauId = HinhThucChonThauId;            
            profile.UserId = UserId;
            profile.CanBoId = 1;
            nc.TblHoSos.InsertOnSubmit(profile);
            nc.SubmitChanges();
        }

        // Hàm cập nhật dữ liệu hồ sơ
        public void updateProfile(int id, 
                                    string TenDuAn,
                                    int MaDuAn,
                                    int NhomCongTrinhId,
                                    int QuyetDinhDauTuId,
                                    int ChuDauTuId,
                                    DateTime NgayNhan,
                                    decimal TongDuAn,
                                    decimal TongDuToan,
                                    decimal DeNghiQuyetToan,
                                    int HinhThucChonThauId,
                                    int UserId)
        {
            TblHoSo profile = nc.TblHoSos.Single(s => s.ID == id);
            profile.TenDuAn = TenDuAn;
            profile.MaDuAn = MaDuAn;
            profile.NhomCongTrinhId = NhomCongTrinhId;
            profile.QuyetDinhDauTuId = QuyetDinhDauTuId;
            profile.ChuDauTuId = ChuDauTuId;
            profile.NgayNhan = NgayNhan;
            profile.TongDuAn = TongDuAn;
            profile.TongDuToan = TongDuToan;
            profile.DeNghiQuyetToan = DeNghiQuyetToan;
            profile.HinhThucChonThauId = HinhThucChonThauId;
            profile.UserId = UserId;
            nc.SubmitChanges();
        }

        // Hàm xóa dữ liệu hồ sơ
        public void deleteProfile(int id)
        {
            var delete = nc.TblHoSos.Single(s => s.ID == id);
            nc.TblHoSos.DeleteOnSubmit(delete);
            nc.SubmitChanges();
        }
    }
}
